/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.knolle.vistas;

import java.awt.Color;
import java.awt.event.ItemEvent;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.swing.JOptionPane;
import org.marcelo.agro.entidades.*;
import org.knolle.campanias.util.ActividadesTableModel;
import org.marcelo.agro.core.ComboEnBackground;
import org.marcelo.agro.core.api.InterfaceAbstractaAccesoADatos;
import org.marcelo.agro.core.api.InterfaceActividades;
import org.marcelo.agro.core.api.InterfaceCampanhas;
import org.knolle.validadores.MatcherClass;
import org.knolle.validadores.ValidadorNumeros;
import org.openide.DialogDescriptor;
import org.openide.DialogDisplayer;
import org.openide.util.Lookup;
import org.openide.util.lookup.InstanceContent;
import org.openide.windows.TopComponent;

/**
 *
 * @author marcelo
 * 
 * Actividad: Cuando se selecciona la actividad, debe permitirse agregar detalles, estos detalles estan relacionados a dicha actividad
 * por ejemplo:
 * 
 * Para la siembra es importante conocer:
 *      Semillas por metro
 *      Distancia entre hileras
 *      profundidad de siembra
 *      Humedad del suelo
 *      Estado seco Humedo
 * 
 * Para Fumigacion es importante conocer:
 *      Viento
 *      Humedad del Ambiente
 *      Temperatura
 *      Hora de Aplicacion
 *      Litros por Hectarea
 *      Tipo de Pico
 *      Presion de Aplicacion
 *
 * Para La cosecha:
 *      Kilos Cosechados
 *      
 * Inicializar los datos de forma asyncrona para los combos
 * El combo TipoProducto debe estar deshabilitado hasta que se seleccione un elemento del combo TipoActividad
 * El combo TIpoActividad Debe permanecer deshabilitado hasta que se borren todas las actividades de la tabla
 * 
 *      
 * 
 * 
 * 
 */

@TopComponent.OpenActionRegistration(displayName="AgregarMultiple", preferredID="VentanaAgregarMultiplesTrabajos")
public class PanelAgregarActividades2 extends javax.swing.JPanel  {

    /**
     * Creates new form PanelAgregarActividades2
     */
    private PanelSeleccionarProducto spp;
    private ActividadesTableModel actividadesTM;
    private Boolean inhabilitarComponentes= Boolean.TRUE;
    private Color color;
    
    private Actividades actual; //Reemplazar todos estos campos
    InterfaceActividades ia;
//    private LotesPorCampana lpc;
//    Estos campos van a volar
//    private Lotes lote;
//    private Campanas campana ;
//    private Productos producto;
//    private BigDecimal superficie;
    private BigDecimal manoObra;
    private BigDecimal horasTrabajadas;
//    private BigDecimal dosis = new BigDecimal("1");
//    private BigDecimal precioUnitario;
    
    private InstanceContent content = new InstanceContent();
    //
    private String MENSAJE_CAMPOS_ERRORES = "";
    
        
    private static final String MENSAJE_CAMPOS_NO_VALIDOS = "Existen campos con datos no validos";
    private static final String MENSAJE_PRODUCTO_NO_SELECCIONADO = "No se selecciono ningun producto";
    private static final String MENSAJE_SELECCION_CANCELADA = "Seleccion cancelada!!!";
    private static final String TITULO_BUSCAR_PRODUCTO = "Buscar producto";
    
    public PanelAgregarActividades2(Campanas campania, Lotes lote) {
        initComponents();
        //Significa que ningun 
        actividadesTM = new ActividadesTableModel();
        tablaActividades.setModel(actividadesTM);
        ia = Lookup.getDefault().lookup(InterfaceActividades.class);
//        Inicializar la actividad
        actual = new Actividades();
        actual.setFecha(campoFecha.getDate());
        actual.setSuperficie(new BigDecimal("1"));
        actual.setDosis(new BigDecimal("1"));
        actual.setPrecioUnitario(new BigDecimal("1"));
        
        cargarComboTipoActividad();
        cargarComboTipoProducto(null);
        cargarComboUnidadDosis();
        setearVerificadores();
        color = Color.PINK;
        
        
        if (campania == null){
        //Se deben mostrar los combosCampana y  comboLote y sus labels
          lblComboCampania.setVisible(true);
          comboCampania.setVisible(true);
          lblComboLote.setVisible(true);
          comboLote.setVisible(true);
          cargarComboCampania();
        }
        else {
//            lpc = lotesPorCampana;
            actual.setCampanas( campania);
            if (lote != null) {
                actual.setLotes( lote );
                actual.setSuperficie( lote.getSuperficie() );
                actual.setUnidadMedidaSuperficie( lote.getUnidadMedidaSuperficie() );
                campoSuperficie.setText(lote.getSuperficie().toPlainString());
            }
            else {
                lblComboLote.setVisible(true);
                comboLote.setVisible(true);
                cargarComboLote(campania);
            }
        }
        
        
    }
  
    /**
     * Setear los verificadores para los Input
     */
    private void setearVerificadores(){
        campoDosis.setInputVerifier(new ValidadorNumeros(this, campoDosis, "", true,MatcherClass.TIPOS_VALIDACION.CAMPO_DECIMALES_POSITIVO));
        campoSuperficie.setInputVerifier(new ValidadorNumeros(this, campoSuperficie, "", true,MatcherClass.TIPOS_VALIDACION.CAMPO_DECIMALES_POSITIVO));
        campoPrecioUnitario.setInputVerifier(new ValidadorNumeros(this, campoPrecioUnitario, "", true, MatcherClass.TIPOS_VALIDACION.CAMPO_DECIMALES_POSITIVO));
        campoManoObra.setInputVerifier(new ValidadorNumeros(this,campoManoObra,"",true,MatcherClass.TIPOS_VALIDACION.CAMPO_DECIMALES_POSITIVO));
        campoCantidadHorasTrabajadas.setInputVerifier(new ValidadorNumeros(this,campoCantidadHorasTrabajadas,"",true,MatcherClass.TIPOS_VALIDACION.CAMPO_DECIMALES_POSITIVO));
    }
    
    /**
     * cargarDatos asyncronos
     */
    
    private void cargarComboTipoActividad(){
//        SwingWorker<DefaultComboBoxModel,TipoActividad> worker = new SwingWorker<DefaultComboBoxModel, TipoActividad>() {
//            DefaultComboBoxModel dcbm;
//            @Override
//            protected DefaultComboBoxModel doInBackground() throws Exception {
//                InterfaceActividades ia = Lookup.getDefault().lookup(InterfaceActividades.class);
//                dcbm = new DefaultComboBoxModel();
//                for (TipoActividad ta : ia.getTiposActividades()) {
//                   dcbm.addElement(ta);
//                }
//                return dcbm;
//            }
//
//            @Override
//            protected void done() {
//                comboTipoActividad.setModel(dcbm);
//            }
//            
//            
//        };
        ComboEnBackground<TipoActividad> worker = new ComboEnBackground<TipoActividad>(comboTipoActividad, Boolean.TRUE) {

            @Override
            public List<TipoActividad> getDatos() {
                return ia.getTiposActividades();
            }
        };
        worker.execute();
        
    
    }  
    
    private void cargarComboTipoProducto(final TipoActividad ta) {
        
        
//        SwingWorker<DefaultComboBoxModel,TipoActividad> worker = new SwingWorker<DefaultComboBoxModel, TipoActividad>() {
//            DefaultComboBoxModel dcbm;
//            @Override
//            protected DefaultComboBoxModel doInBackground() throws Exception {
//                InterfaceActividades ia = Lookup.getDefault().lookup(InterfaceActividades.class);
//                dcbm = new DefaultComboBoxModel();
//                for (TipoProducto datos : ia.getTiposProductos(ta)) {
//                   dcbm.addElement(datos);
//                }
//                return dcbm;
//            }
//
//            @Override
//            protected void done() {
//                comboTipoProducto.setModel(dcbm);
//            }
//            
//            
//        };
        ComboEnBackground<TipoProducto> worker = new ComboEnBackground<TipoProducto>(comboTipoProducto, Boolean.TRUE) {

            @Override
            public List<TipoProducto> getDatos() {
                return ia.getTiposProductos(ta);
            }
        };
        worker.execute();
        
    }
    
    private void cargarComboUnidadDosis(){
    
//        SwingWorker<DefaultComboBoxModel,TipoActividad> worker = new SwingWorker<DefaultComboBoxModel, TipoActividad>() {
//            DefaultComboBoxModel dcbm;
//            @Override
//            protected DefaultComboBoxModel doInBackground() throws Exception {
//                
//                dcbm = new DefaultComboBoxModel();
//                for (UnidadMedidaDosis datos : ia.getUnidadMedidaDosis()) {
//                   dcbm.addElement(datos);
//                }
//                return dcbm;
//            }
//
//            @Override
//            protected void done() {
//                comboUnidadDosis.setModel(dcbm);
//            }
//            
//            
//        };
        ComboEnBackground<UnidadMedidaDosis> worker = new ComboEnBackground<UnidadMedidaDosis>(comboUnidadDosis,Boolean.TRUE) {

            @Override
            public List<UnidadMedidaDosis> getDatos() {
                 return ia.getUnidadMedidaDosis();
            }
        };
        worker.execute();
        
    }
    
    private void cargarComboCampania(){
        ComboEnBackground<Campanas> cb = new ComboEnBackground<Campanas>(comboCampania,Boolean.TRUE){
            @Override
            public List<Campanas> getDatos() {
                InterfaceCampanhas ic = Lookup.getDefault().lookup(InterfaceCampanhas.class);
                return ic.getCampanasActivas();
            }
    
         };
         cb.execute();
    }
    
    private void cargarComboLote(final Campanas campania){
       ComboEnBackground<Lotes> worker = new ComboEnBackground<Lotes>(comboLote, Boolean.TRUE) {

            @Override
            public List<Lotes> getDatos() {
                InterfaceCampanhas ic = Lookup.getDefault().lookup(InterfaceCampanhas.class);
                List<Lotes> lotesList = new ArrayList<Lotes>();
                for(LotesPorCampana lotePorCam : ic.getLotesParaCampanha(campania))
                    lotesList.add(lotePorCam.getLotes());
                return  lotesList;
            }
        };
       worker.execute();
    }
    
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        campoFecha = new org.jdesktop.swingx.JXDatePicker(new Date());
        comboTipoActividad = new javax.swing.JComboBox();
        comboTipoProducto = new javax.swing.JComboBox();
        campoProducto = new javax.swing.JTextField();
        botonBuscar = new javax.swing.JButton();
        campoPrecioUnitario = new javax.swing.JTextField();
        botonAgregarActividad = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        tablaActividades = new javax.swing.JTable();
        comboUnidadDosis = new javax.swing.JComboBox();
        campoDosis = new javax.swing.JTextField();
        campoSuperficie = new javax.swing.JTextField();
        campoManoObra = new javax.swing.JTextField();
        comboManoObra = new javax.swing.JComboBox();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jLabel7 = new javax.swing.JLabel();
        campoControl = new javax.swing.JTextField();
        campoComentario = new javax.swing.JTextField();
        jLabel8 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        campoCantidadHorasTrabajadas = new javax.swing.JTextField();
        lblCantidadHorasTrabajadas = new javax.swing.JLabel();
        botonAgregarDetallesActividad = new javax.swing.JButton();
        comboCampania = new javax.swing.JComboBox();
        comboLote = new javax.swing.JComboBox();
        lblComboCampania = new javax.swing.JLabel();
        lblComboLote = new javax.swing.JLabel();
        lblDibujo = new javax.swing.JLabel();

        campoFecha.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                campoFechaFocusLost(evt);
            }
        });
        campoFecha.addInputMethodListener(new java.awt.event.InputMethodListener() {
            public void caretPositionChanged(java.awt.event.InputMethodEvent evt) {
            }
            public void inputMethodTextChanged(java.awt.event.InputMethodEvent evt) {
                campoFechaInputMethodTextChanged(evt);
            }
        });

        comboTipoActividad.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Seleccione la Actividad" }));
        comboTipoActividad.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                comboTipoActividadItemStateChanged(evt);
            }
        });

        comboTipoProducto.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Seleccione el Tipo de Producto" }));
        comboTipoProducto.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                comboTipoProductoItemStateChanged(evt);
            }
        });

        campoProducto.setEditable(false);
        campoProducto.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.campoProducto.text")); // NOI18N
        campoProducto.setFocusable(false);

        botonBuscar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/marcelo/agro/campanias/recursos/Magnifier_24x24.png"))); // NOI18N
        botonBuscar.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.botonBuscar.text")); // NOI18N
        botonBuscar.setEnabled(false);
        botonBuscar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonBuscarActionPerformed(evt);
            }
        });

        campoPrecioUnitario.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        campoPrecioUnitario.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.campoPrecioUnitario.text")); // NOI18N
        campoPrecioUnitario.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                campoPrecioUnitarioFocusLost(evt);
            }
        });

        botonAgregarActividad.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.botonAgregarActividad.text")); // NOI18N
        botonAgregarActividad.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAgregarActividadActionPerformed(evt);
            }
        });

        tablaActividades.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jScrollPane1.setViewportView(tablaActividades);

        comboUnidadDosis.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Unidad de Medida" }));
        comboUnidadDosis.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                comboUnidadDosisItemStateChanged(evt);
            }
        });

        campoDosis.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        campoDosis.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.campoDosis.text")); // NOI18N
        campoDosis.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                campoDosisFocusLost(evt);
            }
        });

        campoSuperficie.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        campoSuperficie.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.campoSuperficie.text")); // NOI18N
        campoSuperficie.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                campoSuperficieFocusLost(evt);
            }
        });

        campoManoObra.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        campoManoObra.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.campoManoObra.text")); // NOI18N
        campoManoObra.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                campoManoObraFocusLost(evt);
            }
        });

        comboManoObra.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "USD / HA", "USD / Hrs" }));
        comboManoObra.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                comboManoObraItemStateChanged(evt);
            }
        });

        jLabel1.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.jLabel1.text")); // NOI18N

        jLabel2.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.jLabel2.text")); // NOI18N

        jLabel3.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.jLabel3.text")); // NOI18N

        jLabel4.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.jLabel4.text")); // NOI18N

        jLabel5.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.jLabel5.text")); // NOI18N

        jLabel6.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.jLabel6.text")); // NOI18N

        jLabel7.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.jLabel7.text")); // NOI18N

        campoControl.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.campoControl.text")); // NOI18N
        campoControl.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                campoControlFocusLost(evt);
            }
        });

        campoComentario.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.campoComentario.text")); // NOI18N
        campoComentario.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                campoComentarioFocusLost(evt);
            }
        });

        jLabel8.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.jLabel8.text")); // NOI18N

        jLabel9.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.jLabel9.text")); // NOI18N

        campoCantidadHorasTrabajadas.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        campoCantidadHorasTrabajadas.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.campoCantidadHorasTrabajadas.text")); // NOI18N
        campoCantidadHorasTrabajadas.setVisible(false);
        campoCantidadHorasTrabajadas.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                campoCantidadHorasTrabajadasFocusLost(evt);
            }
        });

        lblCantidadHorasTrabajadas.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.lblCantidadHorasTrabajadas.text")); // NOI18N
        lblCantidadHorasTrabajadas.setVisible(false);

        botonAgregarDetallesActividad.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.botonAgregarDetallesActividad.text")); // NOI18N

        comboCampania.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Seleccione la Campaña" }));
        comboCampania.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                comboCampaniaItemStateChanged(evt);
            }
        });

        comboLote.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Seleccione el Lote" }));
        comboLote.setToolTipText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.comboLote.toolTipText")); // NOI18N
        comboLote.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                comboLoteItemStateChanged(evt);
            }
        });

        lblComboCampania.setLabelFor(comboCampania);
        lblComboCampania.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.lblComboCampania.text")); // NOI18N
        lblComboCampania.setVisible(false);

        lblComboLote.setLabelFor(comboLote);
        lblComboLote.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.lblComboLote.text")); // NOI18N
        lblComboLote.setVisible(false);

        lblDibujo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/marcelo/agro/campanias/recursos/Refresh.png"))); // NOI18N
        lblDibujo.setText(org.openide.util.NbBundle.getMessage(PanelAgregarActividades2.class, "PanelAgregarActividades2.lblDibujo.text")); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(21, 21, 21)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jScrollPane1)
                        .addContainerGap())
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel8)
                            .addComponent(jLabel3)
                            .addComponent(campoControl, javax.swing.GroupLayout.PREFERRED_SIZE, 184, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(campoComentario, javax.swing.GroupLayout.PREFERRED_SIZE, 150, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel9))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                                .addComponent(campoSuperficie, javax.swing.GroupLayout.PREFERRED_SIZE, 61, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(18, 18, 18))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jLabel4)
                                .addGap(32, 32, 32)))
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel5)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(campoDosis, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(18, 18, 18)
                                .addComponent(comboUnidadDosis, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel6)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(campoPrecioUnitario, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(18, 18, 18)
                                .addComponent(botonAgregarActividad)))
                        .addGap(93, 93, 93))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(comboTipoProducto, javax.swing.GroupLayout.PREFERRED_SIZE, 184, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18, 18, 18)
                        .addComponent(campoProducto, javax.swing.GroupLayout.PREFERRED_SIZE, 351, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(botonBuscar)
                        .addContainerGap())
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addComponent(campoManoObra)
                                    .addComponent(jLabel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                .addGap(7, 7, 7)
                                .addComponent(comboManoObra, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(18, 18, 18)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(lblCantidadHorasTrabajadas, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(campoCantidadHorasTrabajadas))
                                .addGap(20, 20, 20)
                                .addComponent(botonAgregarDetallesActividad))
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                        .addComponent(campoFecha, javax.swing.GroupLayout.DEFAULT_SIZE, 184, Short.MAX_VALUE)
                                        .addComponent(comboTipoActividad, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                    .addComponent(jLabel1)
                                    .addComponent(jLabel2))
                                .addGap(141, 141, 141)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                                    .addComponent(lblComboLote)
                                    .addComponent(lblComboCampania)
                                    .addComponent(comboCampania, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(comboLote, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                .addGap(27, 27, 27)
                                .addComponent(lblDibujo)))
                        .addGap(0, 0, Short.MAX_VALUE))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(lblComboCampania))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(campoFecha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(comboCampania, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblDibujo, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(lblComboLote))
                .addGap(9, 9, 9)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(comboTipoActividad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(comboLote, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(jLabel3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(botonBuscar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(comboTipoProducto, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(campoProducto))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(jLabel5)
                    .addComponent(jLabel6)
                    .addComponent(jLabel8)
                    .addComponent(jLabel9))
                .addGap(1, 1, 1)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonAgregarActividad)
                    .addComponent(campoPrecioUnitario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(comboUnidadDosis, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(campoDosis, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(campoSuperficie, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(campoControl, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(campoComentario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 219, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel7)
                    .addComponent(lblCantidadHorasTrabajadas))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(campoManoObra, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(comboManoObra, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(campoCantidadHorasTrabajadas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonAgregarDetallesActividad))
                .addContainerGap())
        );

        comboCampania.setVisible(false);
        comboLote.setVisible(false);
    }// </editor-fold>//GEN-END:initComponents

    private void comboTipoActividadItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_comboTipoActividadItemStateChanged
        // TODO add your handling code here:
        if (evt.getStateChange() == ItemEvent.SELECTED){
            if (botonBuscar.isEnabled())
                botonBuscar.setEnabled(false);
            if (evt.getItem() instanceof TipoActividad){
                actual.setTipoActividad((TipoActividad)evt.getItem());
                cargarComboTipoProducto((TipoActividad)evt.getItem());
            }    
        }
        
    }//GEN-LAST:event_comboTipoActividadItemStateChanged

    private void botonBuscarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonBuscarActionPerformed
        // TODO add your handling code here:
        spp = new PanelSeleccionarProducto();
        DialogDescriptor dd = new DialogDescriptor(spp, TITULO_BUSCAR_PRODUCTO, true, null);    

        if (DialogDisplayer.getDefault().notify(dd) == DialogDescriptor.OK_OPTION ){
            if ( null != spp.getProducto()  ){
//                producto = spp.getProducto(); 
                actual.setProductos(spp.getProducto());
                campoProducto.setText( actual.getProductos().getNombre());
            }
            else{
                mostrarMensaje(MENSAJE_PRODUCTO_NO_SELECCIONADO);
            }    
        }
        else {
               mostrarMensaje(MENSAJE_SELECCION_CANCELADA);
        }
    }//GEN-LAST:event_botonBuscarActionPerformed

    private void comboCampaniaItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_comboCampaniaItemStateChanged
        // TODO add your handling code here:
        if (evt.getStateChange() == ItemEvent.SELECTED){
           if (evt.getItem() instanceof Campanas){
                 actual.setCampanas( (Campanas) evt.getItem());
                 cargarComboLote((Campanas) evt.getItem());
           }
        }
    }//GEN-LAST:event_comboCampaniaItemStateChanged

    private void comboTipoProductoItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_comboTipoProductoItemStateChanged
        // TODO add your handling code here:
        if (evt.getStateChange() == ItemEvent.SELECTED){
           if (evt.getItem() instanceof TipoProducto) { 
               actual.setTipoProducto( (TipoProducto) evt.getItem());
               botonBuscar.setEnabled(true);
           }
        }
    }//GEN-LAST:event_comboTipoProductoItemStateChanged

    /**
     * Boton OK presionado, lo que tiene que ocurrir es lo siguiente:
     * Validar el Formulario
     * Setear el POJO con los campos del formulario
     * Agregar el POJO a la tabla
     * Inhabilitar los siguientes combos:
     *      comboCampania
     *      comboLote
     *      comboTipoActividad
     *      Setear el comboTipoProducto al index 0
         * Renderizar la tabla
     * @param evt 
     */
    private void botonAgregarActividadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAgregarActividadActionPerformed
        // TODO add your handling code here:
        
        if (validar()){
//           componentToPojo() 
          actividadesTM.getList().add(actual);
          limpiarComponentes();
          inhabilitarComponentes();
          actividadesTM.fireTableDataChanged();
        }
        else{
           mostrarMensaje(MENSAJE_CAMPOS_NO_VALIDOS+MENSAJE_CAMPOS_ERRORES);
        }   
    }//GEN-LAST:event_botonAgregarActividadActionPerformed
    /**
     * Validar los datos del formulario
     * Los criterios de validacion son los siguientes:
     *      Costo No Puede Ser Cero, ni vacio
     *      Dosis no puede ser cero ni vacio
     *      Superficie debe ser mayor a cero y menor o igual al superficie lote
     *      Los combos deben estar seleccionados    
     * Aparte de verificar si son validos debe dejar indicado que campos no son validos
     * @return 
     */
    private Boolean validar(){
      String campos= "";
      Boolean validar = true; 
      
     if (actual.getCampanas() == null) {
          campos += ", Campaña";
          validar = false;
      }
      if (actual.getLotes() == null){
          campos += ", Lote";
          validar =  false;
      }
      
      if (! (comboTipoActividad.getSelectedItem() instanceof TipoActividad)){
          campos += ", Tipo Actividad";
          validar= false;
      }
         
      if ( ! (comboTipoProducto.getSelectedItem() instanceof TipoProducto)) {
          campos += ", Tipo de Productos";
          validar = false;
      }
      
      if (!(comboUnidadDosis.getSelectedItem() instanceof UnidadMedidaDosis)) {
          campos += ", Unidad de Dosis";
          validar = false;
      }
      
      try {
         
         if (   (actual.getSuperficie().compareTo( actual.getLotes().getSuperficie()) > 0 ) ){
         //Significa que la superficie ingresada es mayor a la superficie del lote
             campos += ", La superficie ingresada es mayor a la del lote"; //NOI18N
             campoSuperficie.setBackground(color);
             validar = false;         
         }
      }
      catch(NullPointerException npe) {
         campos += ", Superficie"; 
         campoSuperficie.setBackground(color);
         validar = false;
      }
      
//      try {
          
//        dosis = new BigDecimal(campoDosis.getText()); 
//      }
//      catch (NumberFormatException nfe){
         if (actual.getDosis() == null) { 
         campos += ", La dosis no puede estar vacia";
          campoDosis.setBackground(color);
          validar = false;
      }
//      try {
//         precioUnitario = new BigDecimal(campoPrecioUnitario.getText());
//      }
//      catch (NumberFormatException nfe){
       if (actual.getPrecioUnitario() == null) {
         campos += ", Precio Unitario esta vacio";
          campoPrecioUnitario.setBackground(color);
          validar = false;
      }
      MENSAJE_CAMPOS_ERRORES = campos;
      return validar;
    }
    /**
     * Cargar los datos de los componentes al POJO
     * @return 
     */
//    private void componentToPojo(){
        //Falta convertir los String a Big Decimal, posiblemente en la funcion anterior a esta lo hare
        
//        Actividades act = new Actividades();
//        
////        act.setCampanas(campana);
////        act.setLotes(actual.getLotes());
//        
//        actual.setTipoActividad( (TipoActividad) comboTipoActividad.getSelectedItem() );
//        actual.setTipoProducto( (TipoProducto) comboTipoProducto.getSelectedItem() );
//        actual.setFecha(campoFecha.getDate());
//        actual.setProductos(producto);
//        
//        actual.setDosis(dosis);
//        actual.setUnidadMedidaDosis((UnidadMedidaDosis) comboUnidadDosis.getSelectedItem());
//        
//        actual.setSuperficie(superficie);
////        act.setUnidadMedidaSuperficie(actual.getLotes().getUnidadMedidaSuperficie());
////        act.setUnidadMedidaSuperficie(((Lotes) comboLote.getSelectedItem()).getUnidadMedidaSuperficie());
//        
//        actual.setComentarios(campoComentario.getText());
//        actual.setControl(campoControl.getText());
//        actual.setPrecioUnitario(precioUnitario);
        
//        return ;
//    }
    
    /**
     * Colocar cada elemento en su valor por defecto
     */
    private void limpiarComponentes(){
         //
        //Guardar parametros, 
        Lotes lote = actual.getLotes();
        Campanas campana = actual.getCampanas();
        TipoActividad ta = actual.getTipoActividad();
//        Crear una nueva instancia de Actividad
        actual = new Actividades();
        actual.setFecha(campoFecha.getDate());
        actual.setTipoActividad(ta);
        actual.setCampanas(campana);
        actual.setLotes(lote);
        actual.setSuperficie(lote.getSuperficie());
        actual.setUnidadMedidaSuperficie(lote.getUnidadMedidaSuperficie());
        actual.setDosis(new BigDecimal("1"));
        actual.setPrecioUnitario(new BigDecimal("1"));
//        Fin
//        Setear los campos por defecto
        comboTipoProducto.setSelectedIndex(0);
        comboUnidadDosis.setSelectedIndex(0);
//        fin
//        Limpiar los campos
        campoProducto.setText("");
        campoComentario.setText("");
        campoControl.setText("");
        campoDosis.setText("1");
//        dosis = new BigDecimal("1");
        campoPrecioUnitario.setText("1");
//        Fin
    }
    
    /**
     * Deshabilitar todos los componentes que es necesario que sean deshabilitado
     */
    private void inhabilitarComponentes(){
        if (inhabilitarComponentes) {
//            Evitar que la proxima vez se ejecute este codigo
            inhabilitarComponentes = false;
//        se procede a inhabilitar los componentes
            campoFecha.setEnabled(false);
            comboCampania.setEnabled(false);
            comboLote.setEnabled(false);
            comboTipoActividad.setEnabled(false);
        }
    }
    
    /**
     * Metodo para mostrar mensajes 
     * 
     */
    
    private void mostrarMensaje(String mensaje){
        JOptionPane.showMessageDialog(this,mensaje);
    }
    
    /**
     * Con este metodo debo setear el valor del campo Superfici
     * @param evt 
     */
    private void comboLoteItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_comboLoteItemStateChanged
        // TODO add your handling code here:
        if (evt.getStateChange() == ItemEvent.SELECTED){
            if (evt.getItem() instanceof Lotes){
                actual.setLotes( (Lotes) evt.getItem());
                actual.setSuperficie(((Lotes) evt.getItem()).getSuperficie()) ;
                actual.setUnidadMedidaSuperficie( ((Lotes) evt.getItem()).getUnidadMedidaSuperficie()  );
                campoSuperficie.setText(actual.getSuperficie().toPlainString());
            }
        }
    }//GEN-LAST:event_comboLoteItemStateChanged

    private void campoSuperficieFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_campoSuperficieFocusLost
        // TODO add your handling code here:
        try {
//            superficie = new BigDecimal(campoSuperficie.getText());
              actual.setSuperficie(new BigDecimal(campoSuperficie.getText()));
        }
        catch (NumberFormatException nfe) {
             //pienso mostrar en la barra de estado el error por un tiempo deternimado
        }
    }//GEN-LAST:event_campoSuperficieFocusLost

    private void campoDosisFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_campoDosisFocusLost
        // TODO add your handling code here:
        try{
            actual.setDosis( new BigDecimal(campoDosis.getText()) );
        }
        catch(NumberFormatException nfe){
        }
    }//GEN-LAST:event_campoDosisFocusLost

    private void campoPrecioUnitarioFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_campoPrecioUnitarioFocusLost
        // TODO add your handling code here:
        try{
            actual.setPrecioUnitario(new BigDecimal(campoPrecioUnitario.getText()));
        }
        catch(NumberFormatException nfe){
        }
    }//GEN-LAST:event_campoPrecioUnitarioFocusLost

    private void campoManoObraFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_campoManoObraFocusLost
        // TODO add your handling code here:
        try{
           manoObra = new BigDecimal(campoManoObra.getText());
        }
        catch(NumberFormatException nfe){}
    }//GEN-LAST:event_campoManoObraFocusLost

    private void campoCantidadHorasTrabajadasFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_campoCantidadHorasTrabajadasFocusLost
        // TODO add your handling code here:
        try{
           horasTrabajadas = new BigDecimal(campoCantidadHorasTrabajadas.getText());
        }
        catch(NumberFormatException nfe){}
    }//GEN-LAST:event_campoCantidadHorasTrabajadasFocusLost

    private void comboManoObraItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_comboManoObraItemStateChanged
        // TODO add your handling code here:
        //Este es un punto muy delicado si se decide a cambiar a multi-moneda, ya que esta fuertemente tipado, no parametrizado
        //Hya que pensar bien como hacer esta parte para poder modificar facilmente
        if (evt.getStateChange() == ItemEvent.SELECTED ) {
            if (evt.getItem().equals("USD / Hrs")) {
                campoCantidadHorasTrabajadas.setVisible(true);
                lblCantidadHorasTrabajadas.setVisible(true);
            }
            else {
                campoCantidadHorasTrabajadas.setVisible(false);
                lblCantidadHorasTrabajadas.setVisible(false);
            }
        
        }
    }//GEN-LAST:event_comboManoObraItemStateChanged

    private void campoControlFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_campoControlFocusLost
        // TODO add your handling code here:
        actual.setControl(campoControl.getText());
    }//GEN-LAST:event_campoControlFocusLost

    private void campoComentarioFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_campoComentarioFocusLost
        // TODO add your handling code here:
        actual.setComentarios(campoComentario.getText());
    }//GEN-LAST:event_campoComentarioFocusLost

    private void comboUnidadDosisItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_comboUnidadDosisItemStateChanged
        // TODO add your handling code here:
        if (evt.getStateChange() == ItemEvent.SELECTED) {
                if (evt.getItem() instanceof UnidadMedidaDosis) {
                    actual.setUnidadMedidaDosis( (UnidadMedidaDosis) evt.getItem() );
                }    
        }
    }//GEN-LAST:event_comboUnidadDosisItemStateChanged

    private void campoFechaFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_campoFechaFocusLost
        // TODO add your handling code here:
        if ( campoFecha.getDate() instanceof Date  ){
            actual.setFecha(campoFecha.getDate());
        }
            
    }//GEN-LAST:event_campoFechaFocusLost

    private void campoFechaInputMethodTextChanged(java.awt.event.InputMethodEvent evt) {//GEN-FIRST:event_campoFechaInputMethodTextChanged
        // TODO add your handling code here:
        if ( campoFecha.getDate() instanceof Date  ){
            actual.setFecha(campoFecha.getDate());
        }
    }//GEN-LAST:event_campoFechaInputMethodTextChanged

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonAgregarActividad;
    private javax.swing.JButton botonAgregarDetallesActividad;
    private javax.swing.JButton botonBuscar;
    private javax.swing.JTextField campoCantidadHorasTrabajadas;
    private javax.swing.JTextField campoComentario;
    private javax.swing.JTextField campoControl;
    private javax.swing.JTextField campoDosis;
    private org.jdesktop.swingx.JXDatePicker campoFecha;
    private javax.swing.JTextField campoManoObra;
    private javax.swing.JTextField campoPrecioUnitario;
    private javax.swing.JTextField campoProducto;
    private javax.swing.JTextField campoSuperficie;
    private javax.swing.JComboBox comboCampania;
    private javax.swing.JComboBox comboLote;
    private javax.swing.JComboBox comboManoObra;
    private javax.swing.JComboBox comboTipoActividad;
    private javax.swing.JComboBox comboTipoProducto;
    private javax.swing.JComboBox comboUnidadDosis;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel7;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lblCantidadHorasTrabajadas;
    private javax.swing.JLabel lblComboCampania;
    private javax.swing.JLabel lblComboLote;
    private javax.swing.JLabel lblDibujo;
    private javax.swing.JTable tablaActividades;
    // End of variables declaration//GEN-END:variables

//    @Override
//    public void actionPerformed(ActionEvent e) {
//        if (e.getSource() == DialogDescriptor.OK_OPTION){
//           se preciono el boton ok para guardar los datos
//           Pero antes de guardar agregar un item mas a la tabla, este item es el de MANO de OBRA y el precio sera
//           calculado en base al comboManoObra
//             if (validarManoObra() ){
//             Actividades a = new Actividad();
//             calcularManoDeObra()
//             actividadesTM.getList().add(a);  
//        } 
//            
//            if (validarManoObra()){
//                calcularManoDeObra();
//                campoManoObra.setText(manoObra.toPlainString());
//                InterfaceAbstractaAccesoADatos iaad =  Lookup.getDefault().lookup(InterfaceAbstractaAccesoADatos.class);
//                try{
//                    iaad.saveOrUpdates(actividadesTM.getList().toArray());
////                    if (this.getParent() instanceof Dialog){
////                        ((Dialog) this.getParent());
////                    }
//                    
//                }
//                catch (Exception ex){
//                     //se produjo un error
//                     ex.printStackTrace();
//                     
//                     
//                }             
//            
//            }
////            finalmente cerrar la ventana
//            else{
//                //Ver como cancelar el cerrado de la ventana
//            }
//            
//        }
//    }
    
    
    
    private Boolean validarManoObra(){
       boolean validar = true; 
       if(manoObra == null) {
          campoManoObra.setBackground(color);
          validar = false;
       }
       if(horasTrabajadas == null && campoCantidadHorasTrabajadas.isVisible()) {
          campoCantidadHorasTrabajadas.setBackground(color);
          validar = false;
       }
       return validar;
    }
    /**
     * Agregar la mano de Obra por el trabajo realizado
     */
    
    private BigDecimal calcularManoDeObra(){

        /**
         * Detalles para tener en cuenta a la hora de realizar el calculo
         * 1) La superficie total sobre la cual se calculara es la del lote en cuestion , no 
         * sobre la superficie de la actividad
         */
        
        if (comboManoObra.getSelectedIndex() == 1) {
            manoObra=  manoObra.multiply(horasTrabajadas);   
            manoObra=  manoObra.divide(actual.getLotes().getSuperficie() , 2, RoundingMode.HALF_UP);   
        }
        
        return manoObra;
    }
    
    public Boolean guardar() throws Exception{
        
        if (validarManoObra()) {
            calcularManoDeObra();
            campoManoObra.setText(manoObra.toPlainString());
            InterfaceAbstractaAccesoADatos iaad =  Lookup.getDefault().lookup(InterfaceAbstractaAccesoADatos.class);
            iaad.saveOrUpdates(actividadesTM.getList().toArray());
            return Boolean.TRUE;
        }
        else{
            return Boolean.FALSE;
        }
    }
}
